package com.styletransfer.mapper;

import com.styletransfer.model.StyleTask;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 风格转换任务Mapper接口
 */
@Mapper
public interface StyleTaskMapper {
    
    /**
     * 插入任务
     * 
     * @param task 任务对象
     * @return 影响行数
     */
    @Insert({
        "INSERT INTO style_task (id, user_id, image_url, style_ids, intensity, status, workflow_run_id, result_info, create_time, update_time)",
        "VALUES (#{id}, #{userId}, #{imageUrl}, #{styleIds}, #{intensity}, #{status}, #{workflowRunId}, #{resultInfo}, NOW(), NOW())"
    })
    int insert(StyleTask task);
    
    /**
     * 更新任务状态
     * 
     * @param id 任务ID
     * @param status 任务状态
     * @param resultUrl 结果URL
     * @param resultInfo 结果附加信息
     * @param errorMessage 错误信息
     * @return 影响行数
     */
    @Update({
        "UPDATE style_task",
        "SET status = #{status}, result_url = #{resultUrl}, result_info = #{resultInfo}, error_message = #{errorMessage},",
        "update_time = NOW(), complete_time = CASE WHEN #{status} IN ('completed', 'failed') THEN NOW() ELSE complete_time END",
        "WHERE id = #{id}"
    })
    int updateStatus(@Param("id") String id, @Param("status") String status, 
                     @Param("resultUrl") String resultUrl, @Param("resultInfo") String resultInfo,
                     @Param("errorMessage") String errorMessage);
    
    /**
     * 更新工作流运行ID
     * 
     * @param id 任务ID
     * @param workflowRunId 工作流运行ID
     * @return 影响行数
     */
    @Update("UPDATE style_task SET workflow_run_id = #{workflowRunId}, update_time = NOW() WHERE id = #{id}")
    int updateWorkflowRunId(@Param("id") String id, @Param("workflowRunId") String workflowRunId);
    
    /**
     * 根据ID查询任务
     * 
     * @param id 任务ID
     * @return 任务对象
     */
    @Select("SELECT * FROM style_task WHERE id = #{id}")
    StyleTask findById(String id);
    
    /**
     * 查询用户的任务列表
     * 
     * @param userId 用户ID
     * @return 任务列表
     */
    @Select("SELECT * FROM style_task WHERE user_id = #{userId} ORDER BY create_time DESC")
    List<StyleTask> findByUserId(Long userId);
    
    /**
     * 查询等待处理的任务
     * 
     * @param limit 限制数量
     * @return 任务列表
     */
    @Select("SELECT * FROM style_task WHERE status = 'waiting' ORDER BY create_time ASC LIMIT #{limit}")
    List<StyleTask> findWaitingTasks(int limit);
    
    /**
     * 根据ID删除任务
     * 
     * @param id 任务ID
     * @return 影响行数
     */
    @Delete("DELETE FROM style_task WHERE id = #{id}")
    int deleteById(String id);
}
